<?php

class Evenement {

//ATTRIBUTS
    private $num;
    private $nomEven;
    private $dateDeb;
    private $dateFin;
    private $etat;
    private $orga;
    private $theme;

//CONSTRUCTEUR
    public function __construct($num, $nom, $dateDebut, $dateFin,$e, $o, $t) {
        $this->nomEven = $nom;
        $this->num = $num;
        $this->dateDeb = $dateDebut;
        $this->dateFin = $dateFin;
        $this->orga = $o;
        $this->theme = $t;
        $this->etat = $e; // etat = en attente de validation à la construction
// 0 = en attente de validation
// 1 = refuse
// 2 = valide
// 3 = Annule
// 4 = Termine
    }

//METHODES
//Getteurs
    public function getID() {
        return $this->numEven;
    }

    public function getNom() {
        return $this->nomEven;
    }

    public function getDateDebut() {
        return $this->dateDeb;
    }

    public function getDateFin() {
        return $this->dateFin;
    }

    public function getEtat() {
        return $this->etat;
    }

//---------------------------------------------------------------------------------------------------------
    public function toString($msg, $n) { // pour Evenement à venir
        if ($this->etat == 0) {
            $varEtat = "Attente de validation";
        } elseif ($this->etat == 1) {
            $varEtat = "Refusé";
        } elseif ($this->etat == 2) {
            $varEtat = "Validé";
        } else if ($this->etat == 3) {
            $varEtat = "Annulé";
        } elseif ($this->etat == 4) {
            $varEtat = "Terminé";
        }
        $tab = array();
        $tab = $this->afficheTheme();
        foreach ($tab as $t) {
            $affichage.= $t->toString() . "<br/>";
        }

        return "<tr><td>" . $this->nomEven . "</td><td>" . $affichage . "</td><td>" . $this->dateDeb . "</td><td>" . $this->dateFin . "</td><td>" . $varEtat . "</td><td>" . $this->orga . "</td><td><p><a href=\"/~meierj/uml/uml/Evenements/ListeInscrits/?numEvent=" . urlencode($this->num) . "\" >Liste des inscrits</a></p><p><a href=" . $msg . "?numEvent=" . urlencode($this->num) . "' >" . $n . "</a></p></td></tr>"; //rajouter le bouton annuler ou supprimer ou aucun
    }

//---------------------------------------------------------------------------------------------------------"</td><td><a href='/~meierj/uml/uml/EspaceMembre/MesEvenements/Annuler/?numEvent=".urlencode($this->num)."' > <img src='/~meierj/uml/uml/Images/bouton-annuler.png' alt='Cancel' />
//enregistre l event courant dans la base de donnees
    public function save() {
//Retourne true si l'ajout a ete fait
        $dbh = new Connexion();
        $dbh = $dbh->pdo();
        $format = 'Y-m-d H:i:s';
        $req = $dbh->prepare("INSERT INTO Evenement(nom,dateDebut,dateFin,statut,organisateur) VALUES(?,?,?,?,?)");
        try {
            $req = $req->execute(array($this->nomEven, $this->dateDeb->format($format), $this->dateFin->format($format), $this->etat = 0, $this->orga));
        } catch (Exception $e) {
            echo 'Erreur de requète : ', $e->getMessage();
        }

        if ($req == 1) {
//AJOUT DE LA LISTE DES THEMES A L EVENT CREE
            $numero = $dbh->lastInsertId();
            $reqq = $dbh->prepare("INSERT INTO contientTheme(evenement,theme) VALUES(?,?)");
            foreach ($this->theme as $t) {
                try {
// $reqq=$reqq->fetch();
                    $reqq->execute(array($numero, $t));
                } catch (Exception $ex) {
                    echo 'Erreur de requète : ', $e->getMessage();
                }
            }
            return 1;
        } else
            return 0;
    }

    function themesEvenement() {

        try {
            $dbh = new Connexion();
            $dbh = $dbh->pdo();
            $tab = array();

            $prepare = $dbh->prepare("SELECT theme FROM contientTheme WHERE evenement=?");
// On indique que nous utiliserons les résultats en tant qu'objet
            $prepare->execute(array($this->num));
// Nous traitons les résultats en boucle

            while ($tuple = $prepare->fetch(PDO::FETCH_OBJ)) {
                $tab[] = new Theme($tuple->theme, '');
            }

            return $tab;
        } catch (Exception $e) {
            echo "Une erreur est survenue lors de la récupération : ", $e->getMessage();
        }
    }

    function afficheTheme() {
        $tab = array();
        $tab = $this->themesEvenement();
        try {
            $dbh = new Connexion();
            $dbh = $dbh->pdo();
            $tab2 = array();
            $prepare = $dbh->prepare("SELECT nom FROM Theme WHERE num=?");
// On indique que nous utiliserons les résultats en tant qu'objet

            foreach ($tab as $t) {
                $prepare->execute(array($t->getNum()));
                $tuple = $prepare->fetch(PDO::FETCH_OBJ);
// Nous traitons les résultats en boucle
                $tab2[] = new Theme('', $tuple->nom);
            }
            return $tab2;
        } catch (Exception $e) {
            echo "Une erreur est survenue lors de la récupération : ", $e->getMessage();
        }
    }

    /*
      function afficheIDEvenement() {
      try {
      $dbh = new Connexion();
      $dbh = $dbh->pdo();
      $tab = array();
      $prepare = $dbh->prepare("SELECT nom,dateDebut,dateFin,organisateur FROM Evenement WHERE dateDebut>CURDATE()");
      // On indique que nous utiliserons les résultats en tant qu'objet
      $prepare->execute(array());
      // Nous traitons les résultats en boucle
      while ($tuple = $prepare->fetch(PDO::FETCH_OBJ)) {
      $tab[] = new Evenement($tuple->nom, $tuple->dateDebut, $tuple->dateFin, $tuple->organisateur, '');
      }
      return $tab;
      } catch (Exception $e) {
      echo "Une erreur est survenue lors de la récupération : ", $e->getMessage();
      }
      } */

//---------------------------------------------------------------------------------------------------------
//affiche la liste de tous les evenements
    function afficheListeEvenement() {
        try {
            $dbh = new Connexion();
            $dbh = $dbh->pdo();
            $tab = array();
            $prepare = $dbh->prepare("SELECT numEvent,nom,dateDebut,dateFin,statut,organisateur FROM Evenement WHERE dateDebut>CURDATE() && statut=?");
// On indique que nous utiliserons les résultats en tant qu'objet
            $prepare->execute(array(2));
// Nous traitons les résultats en boucle
            while ($tuple = $prepare->fetch(PDO::FETCH_OBJ)) {
                $tab[] = new Evenement($tuple->numEvent, $tuple->nom, $tuple->dateDebut, $tuple->dateFin,$tuple->statut, $tuple->organisateur, '');
            }
            return $tab;
        } catch (Exception $e) {
            echo "Une erreur est survenue lors de la récupération : ", $e->getMessage();
        }
    }

//---------------------------------------------------------------------------------------------------------
//affiche la liste de tous les evenements en attente et non passes
    function afficheEvenementAttente() {
        try {
            $dbh = new Connexion();
            $dbh = $dbh->pdo();
            $tab = array();
            $prepare = $dbh->prepare("SELECT numEvent,nom,dateDebut,dateFin,statut,organisateur FROM Evenement WHERE statut=? && dateDebut>CURDATE()");
// On indique que nous utiliserons les résultats en tant qu'objet
            $prepare->execute(array(0));
// Nous traitons les résultats en boucle
            while ($tuple = $prepare->fetch(PDO::FETCH_OBJ)) {
                $tab[] = new Evenement($tuple->numEvent, $tuple->nom, $tuple->dateDebut, $tuple->dateFin,$tuple->statut, $tuple->organisateur, '');
            }
            return $tab;
        } catch (Exception $e) {
            echo "Une erreur est survenue lors de la récupération : ", $e->getMessage();
        }
    }

//-------------------------------------------------------------------------------------------------------------
    /* le set doit �tre emp�cher par le controleur si :
      -l'evenement � commenc�/est termin�e
      -le webMaster peut passer l'etat de l'evenement a valide si il est en "cours de validation" et que �a date concorde avec les date d'�v�nement d�ja valid� --> envoie mail � l'utilisateur
      -il peut le refus� dans tous les cas ??
      -L'organisateur de l'evenement peut Annul� l'evenement si l'evenement est en "Attente de validation ou "Valid�"
      -quand date fin d�pass� faire un setStatut(id,4) automatique .
     */
//retourne -1 si mauvais membre essaie de supprimer un event non a lui
//sinon retourne resultat requete UPDATE
    public function setStatut($id, $newStatut) {
        $dbh = new Connexion();
        $dbh = $dbh->pdo();
     /*   $req = $dbh->prepare("SELECT organisateur FROM Evenement WHERE numEvent=?");
        try {
            $req->execute(array($id));
            $tuple = $req->fetch(PDO::FETCH_OBJ);
            $mail = $tuple->organisateur;
        } catch (Exception $e) {
            echo $e->getMessage();
        }
        if ($mail == $_SESSION['mail']) { */
            $update = $dbh->prepare("UPDATE Evenement SET statut=? WHERE numEvent=?");
            try {
                $update = $update->execute(array($newStatut, $id));
            } catch (Exception $e) {
                echo "Une erreur est survenue lors de l'execution de setStatut : ", $e->getMessage();
            }
            return $update;
    /*    } else {
            return -1;
        }*/
    }

//-------------------------------------------------------------------------------------------------------------

    public function setStatutValide($num) {
        $dbh = new Connexion();
        $dbh = $dbh->pdo();
        $update = $dbh->prepare("UPDATE Evenement SET statut=? WHERE numEvent=?");
        try {
            $update = $update->execute(array(2, $num));
        } catch (Exception $e) {
            echo "Une erreur est survenue lors de l'execution de setStatut : ", $e->getMessage();
        }
        return $update;
    }

//-------------------------------------------------------------------------------------------------------------
    public function VerifEventCommence() {
        $dbh = new Connexion();
        $dbh = $dbh->pdo();
        $prepare = $dbh->prepare("SELECT dateDebut FROM Evenement WHERE nom=?");
        try {
            $prepare->execute(array($this-- > nomEven));
            $date = $prepare->fetch(PDO::FETCH_OBJ);
            if ($date < CURDATE())
                return true;
            else
                return false;
        } catch (Exception $e) {
            echo "Une erreur est survenue lors de l'execution de VerifEventCommence : ", $e->getMessage();
        }
    }

//---------------------------------------------------------------------------------------------
    public function afficheMesEvenements() {
        try {
            $dbh = new Connexion();
            $dbh = $dbh->pdo();
            $tab = array();
            $prepare = $dbh->prepare("SELECT numEvent,nom,dateDebut,dateFin,statut FROM Evenement WHERE organisateur=? && dateDebut>CURDATE() && (statut=? OR statut=?)");
            $prepare->execute(array($this->orga,0,2));
// Nous traitons les r�sultats en boucle
            while ($tuple = $prepare->fetch(PDO::FETCH_OBJ)) {
                $tab[] = new Evenement($tuple->numEvent, $tuple->nom, $tuple->dateDebut, $tuple->dateFin, $tuple->statut,$this->orga, '');
            }
            return $tab;
        } catch (Exception $e) {
            echo "Une erreur est survenue lors de la r�cup�ration : ", $e->getMessage();
        }
    }

//---------------------------------------------------------------------------------------------------------"</td><td><a href='/~meierj/uml/uml/EspaceMembre/MesEvenements/Annuler/?numEvent=".urlencode($this->num)."' > <img src='/~meierj/uml/uml/Images/bouton-annuler.png' alt='Cancel' />

    public function ajoutInscrit($mail) {
        $dbh = new Connexion();
        $dbh = $dbh->pdo();
        //on regarde si le membre n est pas deja inscrit
        $select = $dbh->prepare("SELECT COUNT(*) FROM contientMembre WHERE membre=? && evenement=?");
        $select->execute(array($mail,$this->num));
        $result = $select->fetch();
        if ($result[0] == 0) {
            //Si le membre n est pas deja inscrit alors on l ajoute
            $reqq = $dbh->prepare("INSERT INTO contientMembre(evenement,membre) VALUES(?,?)");
            try {
                $reqq = $reqq->execute(array($this->num, $mail));
            } catch (Exception $ex) {
                echo 'Erreur de requète : ', $e->getMessage();
            }
            if ($reqq == 1) {
                return 1;
            } else
                return 0;
        } else {
            return -1;
        }
    }

}
?>
